• Vue组件无强制命名限制,但组件名终需在html模板中使用,所以必须避免与html保留字重名,官方推荐PascalCase化的命名格式(AbcDef),例如:MyComponent

  • Vue 1.0中,对于字符串模板中的组件名,解析过程为:

    • Vue 会将 template 中的内容插到 DOM 中,以方便解析标签。由于html标签不区分大小写,所有标签名都将转化为小写;
    • 通过标签名寻找对应的自定义组件。匹配顺序为:转化后的小写标签名、camelCase化的标签名、PascalCase化的标签名。

    因此,两种引入形式及其匹配结果如下:

    • 假设模板中<MyComponent></MyComponent>这样引入,首先转为小写<mycomponent></mycomponent>,然后依次匹配mycomponent(无)Mycomponent,结果:无法匹配到MyComponent,报错;
    • 假设模板中<my-component></my-component>这样引入,首先转为小写<my-component></my-component>,然后依次匹配my-componentmyComponentMyComponent,结果:匹配到MyComponent,正确解析;
  • Vue 2.0 相对于 1.0 的最大改进就是引入了 Virtual DOM,使字符串模板的解析不依赖于 DOM,因此也就无需遵从html的标签规范,字符串模板中两种引入方式<MyComponent></MyComponent><my-component></my-component>都是可以的

注:Prop也遵守上述规则,但自定义事件名:

不会被用作一个 JavaScript 变量名或属性名,v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的),所以 v-on:myEvent 将会变成 v-on:myevent——导致 myEvent 不可能被监听到。 因此,我们推荐你始终使用 kebab-case 的事件名。

最后更新时间: 4/27/2021, 7:11:19 PM